{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载模型 识别图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From D:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\compat\\v2_compat.py:96: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "non-resource variables are not supported in the long term\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow.compat.v1 as tf\n",
    "tf.disable_v2_behavior()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "输出函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def printChess(chess):\n",
    "    print(\"  \",end=\"\")\n",
    "    for i in range(15):\n",
    "        print(\"%3d\" %(i), end=\"\")\n",
    "    print(\"\")\n",
    "\n",
    "    for i in range(15):\n",
    "        print(\"%2d\" %(i), end=\"\")\n",
    "        for j in range(15):\n",
    "            if chess[i, j] == 0:\n",
    "                print(\"  *\", end=\"\")\n",
    "            elif chess[i, j] == 1:\n",
    "                print(\"  o\", end=\"\")\n",
    "            else:\n",
    "                print(\"  -\", end=\"\")\n",
    "        print(\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型路径"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_path = \"./net_2.0\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义执行器    加载图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./net_2.0\\conv_ver_1.ckpt\n"
     ]
    }
   ],
   "source": [
    "place = \"CPU\"\n",
    "if place == \"GPU\":\n",
    "    print(\"GPU\")\n",
    "    gpu_options = tf.GPUOptions(allow_growth=True)\n",
    "    gpu_options =tf.GPUOptions(per_process_gpu_memory_fraction=0.8,allow_growth=True) ##每个gpu占用0.8\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t的显存\n",
    "    config=tf.ConfigProto(gpu_options=gpu_options,allow_soft_placement=True,log_device_placement=False)\n",
    "    sess=tf.Session(config=config)##如果电脑有多个GPU，tensorflow默认全部使用。如果想只使用部分GPU，可以设置CUDA_VISIBLE_DEVICES。\n",
    "else:\n",
    "    sess = tf.Session()\n",
    "saver =tf.train.import_meta_graph(model_path + '/conv_ver_1.ckpt.meta')\n",
    "saver.restore(sess,tf.train.latest_checkpoint(model_path))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "graph = tf.get_default_graph()\n",
    "#tensor_name_list = [tensor.name for tensor in graph.as_graph_def().node]\n",
    "# print(tensor_name_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#输入占位符\n",
    "xs = graph.get_tensor_by_name('xs:0')\n",
    "ys = graph.get_tensor_by_name('ys:0')\n",
    "keep_prob = graph.get_tensor_by_name('keep_prob:0')\n",
    "#预测结果\n",
    "y = graph.get_tensor_by_name('y:0')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time =  0.00498652458190918\n",
      "FPS =  200.5404733444896\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1e9f6ef41f0>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#加载图片，图像预处理为灰度图片\n",
    "img = Image.open(\"./img/5.png\").convert('L').resize((96, 96), Image.ANTIALIAS)\n",
    "# 处理为np矩阵\n",
    "img = np.asfarray((np.array(img)/255.0*0.99+0.01).reshape(1,96*96))\n",
    "\n",
    "time_start = time.time()\n",
    "infer_y = sess.run(y,feed_dict={xs:img,keep_prob:1.0})\n",
    "time_end = time.time()\n",
    "\n",
    "print(\"time = \",time_end-time_start)\n",
    "print(\"FPS = \",1.0/(time_end-time_start))\n",
    "plt.imshow(img.reshape(96,96),cmap='Greys',interpolation='None')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    0  1  2  3  4  5  6  7  8  9 10 11 12 13 14\n",
      " 0  *  -  -  -  -  -  -  -  -  -  o  o  -  -  -\n",
      " 1  -  -  -  -  o  o  o  o  o  o  o  o  o  o  -\n",
      " 2  -  -  -  -  o  o  -  -  o  o  o  o  o  -  -\n",
      " 3  -  -  -  -  -  o  o  -  -  o  o  o  o  -  -\n",
      " 4  -  -  -  o  o  o  -  *  -  *  o  o  o  -  -\n",
      " 5  -  -  -  -  *  o  *  *  *  *  o  -  -  -  -\n",
      " 6  -  -  -  -  -  *  o  o  o  *  -  -  -  -  -\n",
      " 7  -  -  -  -  -  o  *  *  o  o  -  -  -  -  -\n",
      " 8  -  -  -  -  -  -  o  *  *  -  o  o  -  -  -\n",
      " 9  -  -  -  o  -  o  o  o  o  -  -  o  -  -  -\n",
      "10  -  -  -  -  -  -  -  -  o  -  -  -  *  -  -\n",
      "11  -  -  -  -  -  -  o  -  -  o  -  -  -  -  -\n",
      "12  -  -  -  -  -  -  -  -  -  -  -  -  -  -  *\n",
      "13  -  -  -  -  -  -  -  -  -  -  -  -  -  -  *\n",
      "14  *  *  *  -  -  -  -  -  -  -  -  *  -  *  *\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(np.argmax(infer_y[0],1).reshape(15,15),cmap='Greys',interpolation='None')\n",
    "#输出棋盘\n",
    "printChess(np.argmax(infer_y[0],1).reshape(15,15))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
